package com.woniu.atms.controller.aft;

import com.github.pagehelper.PageInfo;
import com.woniu.atms.entity.G5Schedule;
import com.woniu.atms.service.ScheduleService;
import com.woniu.atms.util.ResponseResult;
import com.woniu.atms.vo.aft.Schedule.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

/**
 * @author zjh
 * @title: AftScheduleController 班次管理（后台），接口面向后台管理，不考虑缓存等
 * @projectName g5_atms
 * @description: alpha
 * @date 2022/1/18 10:00
 */
@Api(tags = "班次管理（后台）")
@RestController
@RequestMapping("/api/aft/v1/schedule")
public class AftScheduleController {
    @Autowired
    private ScheduleService scheduleService;

    /**
     * 获取所有班次列表
     * @param vo 传入的数据视图
     * @return 返回统一返回
     */
    @ApiOperation(value = "查询所有班次信息",notes = "查询所有班次信息，返回PageInfo分页，参数为视图为页码以及大小")
    @RequestMapping("/list")
    public ResponseResult<PageInfo<G5Schedule>> findAll(@RequestBody @Valid AftScheduleListVO vo){
        return new ResponseResult<>(scheduleService.findAll(vo.getPageSize(), vo.getPageNum()));
    }

    /**
     * 根据id查询班次信息
     * @param vo 传入的数据视图
     * @return 返回统一返回
     */
    @ApiOperation(value = "查询指定班次信息",notes = "查询指定ID的班次信息，返回实体对象，参数为视图为数据库对应ID")
    @RequestMapping("/info")
    public ResponseResult<G5Schedule> info(@RequestBody @Valid AftScheduleInfoVO vo){
        return new ResponseResult<>(scheduleService.findById(vo.getId()));
    }

    /**
     * 根据路线id查询所有班次
     * @param vo 传入的数据视图
     * @return 返回统一返回
     */
    @ApiOperation(value = "查询指定线路的所有班次",notes = "查询指定线路ID对应的所有班次信息，返回实体对象的List，参数为视图为线路的ID")
    @RequestMapping("/schedule_list")
    public ResponseResult<List<G5Schedule>> findByRoute(@RequestBody @Valid AftScheduleRouteListVO vo){
        return new ResponseResult<>(scheduleService.findByRouteId(vo.getRouteId()));
    }

    /**
     * 根据状态查找班次
     * @param vo 传入的数据视图
     * @return 返回统一返回
     */
    @ApiOperation(value = "根据状态查找班次",notes = "查询指定状态的班次信息，返回PageInfo分页，参数为视图为输入的状态值，页码和页面大小")
    @RequestMapping("/list_status")
    public ResponseResult<PageInfo<G5Schedule>> findByStatus(@RequestBody @Valid AftScheduleListStatusVO vo){
        return new ResponseResult<>(scheduleService.findByStatus(vo.getStatus(), vo.getPageSize(), vo.getPageNum()));
    }

    /**
     * 修改班次状态
     * @param vo 传入的数据视图
     * @return 返回统一返回
     */
    @ApiOperation(value = "修改班次状态",notes = "修改指定ID的班次状态，返回执行结果，参数为视图为要修改班次的ID和要修改为的状态")
    @PostMapping("/update_status")
    public ResponseResult updateStatus(@RequestBody @Valid AftScheduleUpdateStatusVO vo){
        scheduleService.updateStatusById(vo.getId(), vo.getStatus());
        return ResponseResult.SUCCESS;
    }

    /**
     * 修改班次价格
     * @param vo 传入的数据视图
     * @return 返回统一返回
     */
    @ApiOperation(value = "修改班次价格",notes = "修改指定ID的班次价格，返回执行结果，参数为视图为要修改班次的ID和要修改为的价格")
    @PostMapping("/update_price")
    public ResponseResult<String> updatePrice(@RequestBody @Valid AftScheduleUpdatePriceVO vo){
        scheduleService.updatePriceById(vo.getId(), vo.getPrice());
        return ResponseResult.SUCCESS;
    }

    /**
     * 添加班次
     * @param vo 传入的数据视图
     * @return 返回统一返回
     */
    @ApiOperation(value = "增加班次信息",notes = "添加一个班次，返回执行结果，参数为视图为除ID外的所有数据库列（请注意外键的引用）")
    @PostMapping("/add")
    public ResponseResult<String> add(@RequestBody @Valid AftScheduleAddVO vo){
        G5Schedule schedule = new G5Schedule();
        BeanUtils.copyProperties(vo, schedule);
        System.out.println("----"+vo.getTime());
        scheduleService.add(schedule);
        return ResponseResult.SUCCESS;
    }




}
